<?php
// +----------------------------------------------------------------------
// | quanli team
// +----------------------------------------------------------------------
// | Copyright (c) 2013-2020 http://www.fistforward.com/ All rights reserved.
// +----------------------------------------------------------------------
// | Author: allen.qiang
// +----------------------------------------------------------------------

/**
 * 支付方式类
 * @package  module
 * @subpackage  base/system
 * @author   allen.qiang
 * @version 1.0
 */

class sysPayment {

    /**
     * 查询支付方式
     * @param array $arg_array
     * @return null
     */
    public function searchPayType( &$arg_array ) {

        global $G_SHOP;

        //sql字符串
        $sql = '';

        //参数类型字符串
        $params_type = '';

        //参数值数组
        $params_array = array();

        //支付方式ID
        if (isset($arg_array['payTypeID']) && is_numeric($arg_array['payTypeID'])) {
            $sql .= ' AND payTypeID = ?';
            $params_type .= 'i';
            $params_array[] = $arg_array['payTypeID'];
        }

        //支付方式类型
        if (isset($arg_array['type']) && is_numeric($arg_array['type'])) {
            $sql .= ' AND type = ?';
            $params_type .= 'i';
            $params_array[] = $arg_array['type'];
        }

        //使用标志
        if (isset($arg_array['useFlg']) && is_numeric($arg_array['useFlg'])) {
            $sql .= ' AND useFlg = ?';
            $params_type .= 'i';
            $params_array[] = $arg_array['useFlg'];
        }

        //来源
        if (isset($arg_array['source'])) {
            if ($arg_array['source'] == 'web') {
                $sql .= ' AND web_usable = 1';
            } else if ($arg_array['source'] == 'wap') {
                $sql .= ' AND wap_usable = 1';
            } else if ($arg_array['source'] == 'wx') {
                $sql .= ' AND wx_usable = 1';
            } else if ($arg_array['source'] == 'app') {
                $sql .= ' AND app_usable = 1';
            } else if ($arg_array['source'] == 'backend') {
                $sql .= ' AND backend_usable = 1';
            }
        }

        if (isset($arg_array['extend']) && !empty($arg_array['extend'])) {
            $sql .= $arg_array['extend'];
        }

        if ($sql) {
            $sql = 'WHERE ' . substr($sql, 4);
        }

        try {

            if (isset($arg_array['rp']) && $arg_array['rp'] > 1) {

                //统计数量
                $search_sql = 'SELECT COUNT(*) AS item_count FROM sys_paytype ' . $sql;
                $count_array = &$G_SHOP->DBCA->stmt_query($search_sql, $params_type, $params_array);
                $item_count = $count_array[0]->item_count;
                if ($item_count == 0) {
                    $arg_array['count'] = 0;
                    return null;
                }

                $arg_array['count'] = $item_count;

                //排序
                if (isset($arg_array['sortname']) && !empty($arg_array['sortname']))
                    $sql .= sprintf(' ORDER BY %s %s', $arg_array['sortname'], $arg_array['sortorder']);

                //分页
                if (!isset($arg_array['page']) || !is_numeric($arg_array['page']) || $arg_array['page'] <= 0)
                    $arg_array['page'] = 1;

                $sql .= sprintf(' LIMIT %d, %d', ($arg_array['page'] - 1) * $arg_array['rp'], $arg_array['rp']);

            } else {

                //排序
                if (isset($arg_array['sortname']) && !empty($arg_array['sortname']))
                    $sql .= sprintf(' ORDER BY %s %s', $arg_array['sortname'], $arg_array['sortorder']);

            }

            //查询分类信息
            $search_sql = 'SELECT * FROM sys_paytype ' . $sql;
            $temp_item_array = &$G_SHOP->DBCA->stmt_query($search_sql, $params_type, $params_array);
            if (!$temp_item_array)
                return null;

            foreach($temp_item_array as &$item) {

                if ($item->type == 1) {
                    $type_name = '货到付款';
                } else if ($item->type == 2) {
                    $type_name = '在线支付';
                } else if ($item->type == 4) {
                    $type_name = '余额';
                } else if ($item->type == 5) {
                    $type_name = '积分';
                }

                $item_array[] = array(
                    'payTypeID' => $item->payTypeID,
                    'payTypeName' => $item->payTypeName,
                    'logo_img' => $item->logo_img ? G_IMAGE_URL . $item->logo_img : '',
                    'memo' => $item->memo,
                    'useFlg' => $item->useFlg,
                    'type' => $item->type,
                    'type_name' => $type_name,
                    'payment_platform' => $item->payment_platform,
                    'is_default' => $item->is_default,
                    'web_usable' => $item->web_usable,
                    'wap_usable' => $item->wap_usable,
                    'wx_usable' => $item->wx_usable,
                    'app_usable' => $item->app_usable,
                    'backend_usable' => $item->backend_usable
                );

            }

            return $item_array;

        } catch (Exception $e) {

            error_log($e->getMessage());
            return null;

        }

    }

    /**
     * 查询支付方式详情
     * @param int $payTypeID 支付方式
     * @param int $useFlg 使用状态，默认为0，为1时表示查询可用的支付方式
     * @return null
     */
    public function searchPayTypeDetail( $payTypeID, $useFlg = 0 ) {

        $args_array = array(
            'payTypeID' => $payTypeID
        );
        if ($useFlg) {
            $args_array['useFlg'] = 1;
        }

        $pay_type_array = $this->searchPayType( $args_array );

        if ($pay_type_array) {
            return $pay_type_array[0];
        } else {
            return null;
        }

    }

    /**
     * 根据配送方式查询支付方式类型
     * @param array $arg_array
     * @return null
     */
    public function searchPayTypeFromSendType( &$arg_array ) {

        global $G_SHOP;

        //sql字符串
        $sql = '';

        //参数类型字符串
        $params_type = '';

        //参数值数组
        $params_array = array();

        //配送方式ID
        if (isset($arg_array['sendTypeID']) && quanli_is_int($arg_array['sendTypeID'])) {
            $sql .= ' AND sendTypeID = ?';
            $params_type .= 'i';
            $params_array[] = $arg_array['sendTypeID'];
        }

        if ($sql) {
            $sql = 'WHERE ' . substr($sql, 4);
        }

        try {

            if (isset($arg_array['rp']) && $arg_array['rp'] > 1) {

                //统计数量
                $search_sql = 'SELECT COUNT(*) AS item_count FROM sys_sendtype_pay ' . $sql;
                $count_array = &$G_SHOP->DBCA->stmt_query($search_sql, $params_type, $params_array);
                $item_count = $count_array[0]->item_count;
                if ($item_count == 0) {
                    $arg_array['count'] = 0;
                    return null;
                }

                $arg_array['count'] = $item_count;

                //排序
                if (isset($arg_array['sortname']) && !empty($arg_array['sortname']))
                    $sql .= sprintf(' ORDER BY %s %s', $arg_array['sortname'], $arg_array['sortorder']);

                //分页
                if (!isset($arg_array['page']) || !is_numeric($arg_array['page']) || $arg_array['page'] <= 0)
                    $arg_array['page'] = 1;

                $sql .= sprintf(' LIMIT %d, %d', ($arg_array['page'] - 1) * $arg_array['rp'], $arg_array['rp']);

            } else {

                //排序
                if (isset($arg_array['sortname']) && !empty($arg_array['sortname']))
                    $sql .= sprintf(' ORDER BY %s %s', $arg_array['sortname'], $arg_array['sortorder']);

            }

            //查询分类信息
            $search_sql = 'SELECT * FROM sys_sendtype_pay ' . $sql;
            $temp_item_array = &$G_SHOP->DBCA->stmt_query($search_sql, $params_type, $params_array);
            if (!$temp_item_array)
                return null;

            foreach($temp_item_array as &$item) {
                if ($item->pay_type == 1)
                    $item->pay_type_name = '货到付款';
                else if ($item->pay_type == 2)
                    $item->pay_type_name = '在线支付';
                $item_array[] = array(
                    'sendTypeID' => $item->sendTypeID,
                    'pay_type' => $item->pay_type,
                    'pay_type_name' => $item->pay_type_name
                );
            }

            return $item_array;

        } catch (Exception $e) {

            error_log($e->getMessage());
            return null;

        }

    }


    /**
     * 新增或修改支付方式
     * @param array $arg_array 支付方式参数
     * @return array
     */
    public function editPayType ( $arg_array ) {

        global $G_SHOP;

        quanli_include('module/base/common/quanliFile.class.php');

        if (!isset($arg_array['payTypeName'], $arg_array['type'],  $arg_array['operator'], $arg_array['web_usable'], $arg_array['wap_usable'], $arg_array['wx_usable'], $arg_array['app_usable']) || empty($arg_array['operator'])) {
            return array( 'code' => 400, 'message' => '参数错误' );
        }

        //支付方式名称
        if (empty($arg_array['payTypeName'])) {
            return array( 'code' => 400, 'message' => '支付方式名称不能为空' );
        }

        //支付方式类型
        if (!in_array($arg_array['type'], array(1, 2, 3, 4, 5))) {
            return array( 'code' => 400, 'message' => '请选择支付方式类型' );
        }

        //平台类型
        if ($arg_array['type'] == 2) {
            if (!isset($arg_array['payment_platform']) || !in_array($arg_array['payment_platform'], array(1, 2))) {
                return array( 'code' => 400, 'message' => '请选择平台类型' );
            }
        } else {
            $arg_array['payment_platform'] = null;
        }

        //b2c是否可用
        if (!in_array($arg_array['web_usable'], array(0, 1))) {
            $arg_array['web_usable'] = 1;
        }

        //wap是否可用
        if (!in_array($arg_array['wap_usable'], array(0, 1))) {
            $arg_array['wap_usable'] = 1;
        }

        //wx是否可用
        if (!in_array($arg_array['wx_usable'], array(0, 1))) {
            $arg_array['wx_usable'] = 1;
        }

        //app是否可用
        if (!in_array($arg_array['app_usable'], array(0, 1))) {
            $arg_array['app_usable'] = 1;
        }

        //后台是否可用
        if (!in_array($arg_array['backend_usable'], array(0, 1))) {
            $arg_array['backend_usable'] = 1;
        }

        //支付方式ID
        if (!isset($arg_array['payTypeID']) || !quanli_is_int($arg_array['payTypeID'])) {
            $arg_array['payTypeID'] = 0;
        }

        //支付方式logo
        if (!isset($arg_array['logo_img']) || empty($arg_array['logo_img'])) {
            $arg_array['logo_img'] = null;
        }



        if (empty($arg_array['logo_img'])) {

            $arg_array['logo_img'] = null;

        } else {

            //实例文件类
            $quanliFile = new quanliFile();

            //生成新地址
            $arg_array['logo_img'] = $quanliFile->basename_db($arg_array['logo_img'], 'system');

        }

        try {

            $pay_type_obj = new entity('sys_paytype');
            if ($arg_array['payTypeID'] > 0) {

                $pay_type_obj->payTypeID = $arg_array['payTypeID'];
                if (!$G_SHOP->DBCA->fetch($pay_type_obj)) {
                    throw new Exception('支付方式信息没有找到', 404);
                }
                if(empty($arg_array['logo_img_box'])){
                    $pay_type_obj->logo_img = NULL;
                }
            } else {

                $pay_type_obj->creator = $arg_array['operator'];
                $pay_type_obj->useFlg = 1;
                $pay_type_obj->is_default = 0;


            }
            if ($arg_array['logo_img']) {
                $pay_type_obj->logo_img = $arg_array['logo_img'];
            }
            $pay_type_obj->payTypeName = $arg_array['payTypeName'];
            $pay_type_obj->memo = $arg_array['memo'];
            $pay_type_obj->type = $arg_array['type'];
            $pay_type_obj->payment_platform = $arg_array['payment_platform'];
            $pay_type_obj->web_usable = $arg_array['web_usable'];
            $pay_type_obj->wap_usable = $arg_array['wap_usable'];
            $pay_type_obj->wx_usable = $arg_array['wx_usable'];
            $pay_type_obj->app_usable = $arg_array['app_usable'];
            $pay_type_obj->backend_usable = $arg_array['backend_usable'];
            $G_SHOP->DBCA->save($pay_type_obj);

            return array( 'code' => 200, 'message' => '支付方式保存成功' );

        } catch (Exception $e) {

            if ($e->getCode() > 0) {
                return array( 'code' => $e->getCode(), 'message' => $e->getMessage() );
            } else {
                error_log($e->getMessage());
                return array( 'code' => 500, 'message' => '系统错误' );
            }

        }

    }

    /**
     * 删除支付方式
     * @param array $pay_array 支付方式ID数组
     * @return array
     */
    public function deletePayType ( $pay_array ) {

        global $G_SHOP;

        if (!isset($pay_array) || !is_array($pay_array) || empty($pay_array)) {
            return array( 'code' => 400, 'message' => '参数错误' );
        }

        try {

            $G_SHOP->DBCA->beginTransaction();

            foreach($pay_array as &$payTypeID) {

                if (in_array($payTypeID, array(1, 2, 3))) {
                    throw new Exception('ID[1,2,3]是系统默认的支付方式<br />不可以删除', 404);
                }

                //查询支付方式
                $pay_obj = new entity('sys_paytype');
                $pay_obj->payTypeID = $payTypeID;
                if (!$G_SHOP->DBCA->fetch($pay_obj)) {
                    throw new Exception('支付方式信息没有找到', 404);
                }

                //判断支付方式类型，删除相关的数据
                if ($pay_obj->type == 1) { //货到付款类型，则删除支付类型

                    $delete_sql = 'DELETE FROM sys_payment_method WHERE payTypeID = ?';
                    $G_SHOP->DBCA->stmt_query($delete_sql, 'i', $payTypeID);

                } else if ($pay_obj->type == 2) { //在线支付类型，则删除支付参数表数据

                    $delete_sql = 'DELETE FROM sys_online_parameter WHERE payTypeID = ?';
                    $G_SHOP->DBCA->stmt_query($delete_sql, 'i', $payTypeID);

                }

                //删除支付方式信息
                $G_SHOP->DBCA->delete($pay_obj);

            }

            $G_SHOP->DBCA->commit();

            return array( 'code' => 200, 'message' => '支付方式删除成功' );

        } catch ( Exception $e ) {

            $G_SHOP->DBCA->rollBack();

            if ($e->getCode() > 0) {
                return array( 'code' => $e->getCode(), 'message' => $e->getMessage() );
            } else {
                error_log($e->getMessage());
                return array( 'code' => 500, 'message' => '系统错误' );
            }

        }

    }

    /**
     * 支付方式启用/禁用
     * @param int $payTypeID 支付方式ID
     * @return array
     */
    public function changePayType( $payTypeID ) {

        global $G_SHOP;

        if (!isset($payTypeID) || !is_numeric($payTypeID)) {
            return array( 'code' => 400, 'message' => '参数错误' );
        }

        try {

            //查询支付方式
            $pay_obj = new entity('sys_paytype');
            $pay_obj->payTypeID = $payTypeID;
            if (!$G_SHOP->DBCA->fetch($pay_obj)) {
                throw new Exception('支付方式信息没有找到', 404);
            }

            //修改付款方式使用状态
            $useFlg = $pay_obj->useFlg;
            if ($useFlg) {
                $pay_obj->useFlg = 0;
            } else {
                $pay_obj->useFlg = 1;
            }
            $G_SHOP->DBCA->save($pay_obj);

            if ($useFlg) {
                return array( 'code' => 200, 'message' => '支付方式禁用成功' );
            } else {
                return array( 'code' => 200, 'message' => '支付方式启用成功' );
            }


        } catch ( Exception $e ) {

            if ($e->getCode() > 0) {
                return array( 'code' => $e->getCode(), 'message' => $e->getMessage() );
            } else {
                error_log($e->getMessage());
                return array( 'code' => 500, 'message' => '系统错误' );
            }

        }

    }

    /**
     * 查询付款方式
     * @param array $arg_array
     * @return null|array
     */
    public function searchPaymentMethod( &$arg_array ) {

        global $G_SHOP;

        //sql字符串
        $sql = '';

        //参数类型字符串
        $params_type = '';

        //参数值数组
        $params_array = array();

        //支付方式ID
        if (isset($arg_array['payTypeID']) && is_numeric($arg_array['payTypeID'])) {
            $sql .= ' AND payTypeID = ?';
            $params_type .= 'i';
            $params_array[] = $arg_array['payTypeID'];
        }
        //使用标志
        if (isset($arg_array['id']) && is_numeric($arg_array['id'])) {
            $sql .= ' AND id = ?';
            $params_type .= 'i';
            $params_array[] = $arg_array['id'];
        }

        //筛选条件 add by allen.qiang 2015-05-01
        if (isset($arg_array['extend']) && !empty($arg_array['extend'])) {
            $sql .= $arg_array['extend'];
        }

        if ($sql) {
            $sql = 'WHERE ' . substr($sql, 4);
        }

        try {

            if (isset($arg_array['rp']) && $arg_array['rp'] > 1) {

                //统计数量
                $search_sql = 'SELECT COUNT(*) AS item_count FROM sys_payment_method ' . $sql;
                $count_array = &$G_SHOP->DBCA->stmt_query($search_sql, $params_type, $params_array);
                $item_count = $count_array[0]->item_count;
                if ($item_count == 0) {
                    $arg_array['count'] = 0;
                    return null;
                }

                $arg_array['count'] = $item_count;

                //排序
                if (isset($arg_array['sortname']) && !empty($arg_array['sortname']))
                    $sql .= sprintf(' ORDER BY %s %s', $arg_array['sortname'], $arg_array['sortorder']);

                //分页
                if (!isset($arg_array['page']) || !is_numeric($arg_array['page']) || $arg_array['page'] <= 0)
                    $arg_array['page'] = 1;

                $sql .= sprintf(' LIMIT %d, %d', ($arg_array['page'] - 1) * $arg_array['rp'], $arg_array['rp']);

            } else {

                //排序
                if (isset($arg_array['sortname']) && !empty($arg_array['sortname']))
                    $sql .= sprintf(' ORDER BY %s %s', $arg_array['sortname'], $arg_array['sortorder']);

            }

            //查询分类信息
            $search_sql = 'SELECT * FROM sys_payment_method ' . $sql;
            $temp_item_array = &$G_SHOP->DBCA->stmt_query($search_sql, $params_type, $params_array);
            if (!$temp_item_array)
                return null;

            $item_array = array();
            foreach($temp_item_array as &$item) {

                $item_array[] = array(
                    'payTypeID' => $item->payTypeID,
                    'id' => $item->id,
                    'name' => $item->name,
                    'memo' => $item->memo,
                    'type' => $item->type,
                    'logo_img' =>$item->logo_img ? G_IMAGE_URL . $item->logo_img : '',
                    'is_invoice'=>$item->is_invoice,
                );

            }

            return $item_array;

        } catch (Exception $e) {

            error_log($e->getMessage());
            return null;

        }

    }

    /**
     * 新增、编辑付款方式
     * @param array $arg_array 参数数组
     * @return array
     */
    public function editPayWay ( $arg_array ) {

        global $G_SHOP;
        quanli_include('module/base/common/quanliFile.class.php');
        if (!isset($arg_array['id'], $arg_array['operator'],$arg_array['payTypeID'], $arg_array['name'],$arg_array['type'])) {
            return array( 'code' => 400, 'message' => '参数错误' );
        }

        if (empty($arg_array['name'])) {
            return array( 'code' => 400, 'message' => '付款方式名称不能为空' );
        }

        if (!in_array($arg_array['type'],array(1,2,3))) {
            return array( 'code' => 400, 'message' => '付款方式类型错误' );
        }

        if (!isset($arg_array['id']) || !quanli_is_int($arg_array['id'])) {
            $arg_array['id'] = 0;
        }

        //付款logo
        if (!isset($arg_array['logo_img']) || empty($arg_array['logo_img'])) {
            $arg_array['logo_img'] = null;
        }



        if (empty($arg_array['logo_img'])) {

            $arg_array['logo_img'] = null;

        } else {

            //实例文件类
            $quanliFile = new quanliFile();

            //生成新地址
            $arg_array['logo_img'] = $quanliFile->basename_db($arg_array['logo_img'], 'system');

        }

        try {

            //查询支付方式
            $p_arg_array = array (
                'payTypeID' => $arg_array['payTypeID']
            );
            $pay_type_array = $this->searchPayType( $p_arg_array );
            if (!$pay_type_array) {
                throw new Exception('支付方式信息没有找到', 404);
            }
            if (in_array($pay_type_array[0]['type'], array(2, 4, 5))) {
                throw new Exception('选择的支付方式类型不是货到付款', 404);
            }

            //检查付款方式
            $method_obj = new entity('sys_payment_method');
            $method_obj->payTypeID = $arg_array['payTypeID'];
            if ($arg_array['id'] > 0) {
                $method_obj->id = $arg_array['id'];
                if (!$G_SHOP->DBCA->fetch($method_obj)) {
                    throw new Exception('付款方式信息没有找到', 404);
                }
                if(empty($arg_array['logo_img_box'])){
                    $method_obj->logo_img = NULL;
                }
            } else {
                $method_obj->creator = $arg_array['operator'];

            }
            $method_obj->name = $arg_array['name'];
            $method_obj->memo = $arg_array['memo'];
            if ($arg_array['logo_img']) {
                $method_obj->logo_img = $arg_array['logo_img'];
            }
            $method_obj->type = $arg_array['type'];
            $method_obj->is_invoice = $arg_array['is_invoice'];
            $G_SHOP->DBCA->save($method_obj);

            return array( 'code' => 200, 'message' => '付款方式保存成功' );

        } catch ( Exception $e ) {

            if ($e->getCode() > 0) {
                return array( 'code' => $e->getCode(), 'message' => $e->getMessage() );
            } else {
                error_log($e->getMessage());
                return array( 'code' => 500, 'message' => '系统错误' );
            }

        }

    }

    /**
     * 删除货到付款 -- 付款方式
     * @param int $payTypeID 支付方式ID
     * @param int $id 付款方式ID
     * @return array
     * @throws Exception
     */
    public function deletePayWay ( $arg_array ) {

        global $G_SHOP;

        if (!isset($arg_array) || !is_array($arg_array) || empty($arg_array)) {
            return array( 'code' => 400, 'message' => '参数错误' );
        }

        try {

            foreach($arg_array as &$id) {
                //查询付款方式
                $payment_method_obj = new entity('sys_payment_method');
                $payment_method_obj->id = $id;
                if (!$G_SHOP->DBCA->fetch($payment_method_obj)) {
                    throw new Exception('付款方式信息没有找到', 404);
                }

                //删除付款方式信息
                $G_SHOP->DBCA->delete( $payment_method_obj );
            }
            return array( 'code' => 200, 'message' => '付款方式删除成功' );

        } catch ( Exception $e ) {

            if ($e->getCode() > 0) {
                return array( 'code' => $e->getCode(), 'message' => $e->getMessage() );
            } else {
                error_log($e->getMessage());
                return array( 'code' => 500, 'message' => '系统错误' );
            }

        }

    }

    /**
     * 查询支付方式
     * @param int $payTypeID 支付方式ID
     * @return null
     */
    public function searchOnlinepPrameter( $payTypeID ) {

        global $G_SHOP;

        if (!isset($payTypeID) || !quanli_is_int($payTypeID)) {
            return null;
        }

        //查询信息
        $search_sql = 'SELECT * FROM sys_online_parameter WHERE payTypeID = ?';
        $temp_item_array = &$G_SHOP->DBCA->stmt_query($search_sql, 'i', $payTypeID);
        if (!$temp_item_array)
            return null;

        $item_array = array();
        foreach($temp_item_array as &$item) {
            $item_array = array(
                'payTypeID' => $item->payTypeID,
                'payTypeName' => $item->payTypeName,
                'partnerID' => $item->partnerID,
                'seller_email' => $item->seller_email,
                'seller_name' => $item->seller_name,
                'service' => $item->service,
                'md5_key' => $item->md5_key,
                'private_key' => $item->private_key,
                'public_key' => $item->public_key,
                'sign_type' => $item->sign_type,
                'charset' => $item->charset,
                'gate_url' => $item->gate_url,
                'notify_url' => $item->notify_url,
                'return_url' => $item->return_url,
                'version' => $item->version,
                'extend_1' => $item->extend_1,
                'extend_2' => $item->extend_2,
                'extend_3' => $item->extend_3,
                'extend_4' => $item->extend_4,
                'extend_5' => $item->extend_5,
                'alias' => $item->alias,
            );
        }

        return $item_array;

    }

    /**
     * 保存在线支付参数
     * @param array $arg_array 参数数组
     * @return array
     */
    public function editOnline ( $arg_array ) {

        global $G_SHOP;

        if (!isset($arg_array['payTypeID'], $arg_array['operator'], $arg_array['partnerID'], $arg_array['alias'], $arg_array['sign_type'])
            || !is_numeric($arg_array['payTypeID']) || empty($arg_array['operator'])) {
            return array( 'code' => 400, 'message' => '参数错误' );
        }

        if (empty($arg_array['partnerID'])) {
            return array( 'code' => 400, 'message' => '商户号不能为空' );
        }
        if (empty($arg_array['alias'])) {
            return array( 'code' => 400, 'message' => '别名不能为空' );
        }
        if (empty($arg_array['sign_type'])) {
            return array( 'code' => 400, 'message' => '签名方式不能为空' );
        }

        try {

            $p_arg_array = array(
                'payTypeID' => $arg_array['payTypeID']
            );
            $pay_type_array = $this->searchPayType( $p_arg_array );
            if (!$pay_type_array) {
                throw new Exception('支付方式信息没有找到', 404);
            }
            if (in_array($pay_type_array[0]['type'], array(1, 3, 4, 5))) {
                throw new Exception('选择的支付方式类型不是在线支付', 404);
            }

            $online_obj = new entity('sys_online_parameter');
            $online_obj->payTypeID = $arg_array['payTypeID'];
            if (!$G_SHOP->DBCA->fetch($online_obj)) {
                $online_obj->creator = $arg_array['operator'];
            } else {
                $online_obj->editor = $arg_array['operator'];
            }
            $online_obj->payTypeName = $pay_type_array[0]['payTypeName'];
            $online_obj->partnerID = $arg_array['partnerID'];
            $online_obj->seller_email = $arg_array['seller_email'];
            $online_obj->seller_name = $arg_array['seller_name'];
            $online_obj->service = $arg_array['service'];
            $online_obj->md5_key = $arg_array['md5_key'];
            $online_obj->private_key = $arg_array['private_key'];
            $online_obj->public_key = $arg_array['public_key'];
            $online_obj->public_key = $arg_array['public_key'];
            $online_obj->sign_type = $arg_array['sign_type'];
            $online_obj->charset = $arg_array['charset'];
            $online_obj->gate_url = $arg_array['gate_url'];
            $online_obj->version = $arg_array['version'];
            $online_obj->extend_1 = $arg_array['extend_1'];
            $online_obj->extend_2 = $arg_array['extend_2'];
            $online_obj->extend_3 = $arg_array['extend_3'];
            $online_obj->extend_4 = $arg_array['extend_4'];
            $online_obj->extend_5 = $arg_array['extend_5'];
            $online_obj->alias = $arg_array['alias'];
            $G_SHOP->DBCA->save($online_obj);

            return array( 'code' => 200, 'message' => '保存成功' );

        } catch ( Exception $e ) {

            if ($e->getCode() > 0) {
                return array( 'code' => $e->getCode(), 'message' => $e->getMessage() );
            } else {
                error_log($e->getMessage());
                return array( 'code' => 500, 'message' => '系统错误' );
            }

        }

    }

    /**
     * 查询促销活动下的付款方式
     * @param array $arg_array
     * @return null|array
     */
    public function searchPromotionPayment( &$arg_array ) {

        global $G_SHOP;

        //sql字符串
        $sql = '';

        //参数类型字符串
        $params_type = '';

        //参数值数组
        $params_array = array();

        //使用标志
        if (isset($arg_array['promotionID']) && is_numeric($arg_array['promotionID'])) {
            $sql .= ' AND promotionID = ?';
            $params_type .= 'i';
            $params_array[] = $arg_array['promotionID'];
        }

        //支付方式payTypeID
        if (isset($arg_array['payTypeID']) && is_numeric($arg_array['payTypeID'])) {
            $sql .= ' AND payTypeID = ?';
            $params_type .= 'i';
            $params_array[] = $arg_array['payTypeID'];
        }

        //促销活动类型
        if (isset($arg_array['type']) && is_numeric($arg_array['type'])) {
            $sql .= ' AND type = ?';
            $params_type .= 'i';
            $params_array[] = $arg_array['type'];
        }

        if ($sql) {
            $sql = 'WHERE ' . substr($sql, 4);
        }

        try {

            if (isset($arg_array['rp']) && $arg_array['rp'] > 1) {

                //统计数量
                $search_sql = 'SELECT COUNT(*) AS item_count FROM promotion_payment ' . $sql;
                $count_array = &$G_SHOP->DBCA->stmt_query($search_sql, $params_type, $params_array);
                $item_count = $count_array[0]->item_count;
                if ($item_count == 0) {
                    $arg_array['count'] = 0;
                    return null;
                }

                $arg_array['count'] = $item_count;

                //排序
                if (isset($arg_array['sortname']) && !empty($arg_array['sortname']))
                    $sql .= sprintf(' ORDER BY %s %s', $arg_array['sortname'], $arg_array['sortorder']);

                //分页
                if (!isset($arg_array['page']) || !is_numeric($arg_array['page']) || $arg_array['page'] <= 0)
                    $arg_array['page'] = 1;

                $sql .= sprintf(' LIMIT %d, %d', ($arg_array['page'] - 1) * $arg_array['rp'], $arg_array['rp']);

            } else {

                //排序
                if (isset($arg_array['sortname']) && !empty($arg_array['sortname']))
                    $sql .= sprintf(' ORDER BY %s %s', $arg_array['sortname'], $arg_array['sortorder']);

            }

            //查询分类信息
            $search_sql = 'SELECT * FROM promotion_payment ' . $sql;
            $temp_item_array = &$G_SHOP->DBCA->stmt_query($search_sql, $params_type, $params_array);
            if (!$temp_item_array)
                return null;

            $item_array = array();
            foreach($temp_item_array as &$item) {

                $item_array[] = array(
                    'promotionID' => $item->promotionID,
                    'payTypeID' => $item->payTypeID,
                    'paymentID' => $item->paymentID,
                    'type' => $item->type
                );

            }

            return $item_array;

        } catch (Exception $e) {

            error_log($e->getMessage());
            return null;

        }

    }

}

